package cn.tedu.csmall.stock.webapi.quartz;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// Quartz的绑定触发和调用关系的配置
// 实际上我们要配置的是Quartz中的调度器Scheduler
// 因为调度器已经在Spring中了,所以变为了配置Spring
@Configuration
public class QuartzConfig {
    // 配置的核心是两个对象,一个JobDetail对象指定工作内容,一个Trigger指定触发时间

    // 首先装配JobDetail: 将我们编写的Job实现类封装为JobDetail
    // 我们使用@Bean注解,将对象保存到Spring容器
    @Bean
    public JobDetail showTime(){
        System.out.println("!!!!!!!!!!!!!!!!!!!JobDetail保存到Spring容器");
        // newJob方法就是在绑定要运行的Job接口实现类,该方法参数要传入实现类的反射
        return JobBuilder.newJob(QuartzJob.class)
                // 为当前的JobDetail对象起名,用于Quartz的调度环境中
                .withIdentity("dateTime")
                // 默认情况下,JobDetail对象如果没有触发器绑定会立即被移除
                // 设置了storeDurably()之后,当前JobDetail对象没有触发器绑定也不会移除了
                .storeDurably()
                .build();
    }

    // 下面是触发器的声明,也会保存到Spring容器中管理
    // 它是设置Job运行时机的对象
    @Bean
    public Trigger showTimeTrigger(){

        System.out.println("!!!!!!!!!!!!!!!!!Trigger保存到Spring容器");
        // 要想设置触发时间,我们使用Cron表达式
        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                // 绑定要运行的JobDetail对象
                .forJob(showTime())
                // 给触发器起名
                .withIdentity("dateTrigger")
                // 绑定cron表达式
                .withSchedule(cron)
                .build();
    }



}
